Adding some more judges, here and there.
[andmenj-acm.git] / ICPC Live Archive / 3928 - Ballroom lights / help / gomox.ar-pap-2010-d9b17e5cb110 / tpa / doc / bishops.tex
blob416ec3ddd4f402824d736b04f92f1e13a3a93655
1 \section{861 - Little bishops}
3 \textbf{Problema:} dados dos enteros $n$ y $k$, devolver la cantidad
4 de formas de ubicar $k$ alfiles en un tablero de $n \times n$, de manera tal
5 que ninguno de ellos sea atacado por otro.
7 \subsection{Resoluci\'on}
8 Para resolverlo, primero notamos que las casillas negras y las blancas
9 son independientes, en el sentido de que un alfil en una casilla de un color
10 nunca puede atacar a un alfil en una casilla del color opuesto.
11 Por esta raz\'on, la cantidad de formas de ubicar $k$ alfiles
12 en un tablero de $n \times n$ se puede calcular de la siguiente manera:
14 Sea $a_k$ la cantidad de formas de ubicar $k$ alfiles sin que se ataquen
15 en un tablero de $n \times n$. Si $a_k^B$ es la cantidad de formas de ubicar
16 $k$ alfiles sin que se ataquen en las casillas blancas y
17 $a_k^N$ es la cantidad de formas de hacerlo en las negras, entonces vale que:
19 $$a_k = \sum_{i=0}^k{a_i^N \cdot a_{k-i}^B}$$
21 Por otro lado, mirando s\'olo las casillas negras
22 (es an\'alogo para las blancas) y rotando el tablero $45º$,
23 el problema de ubicar alfiles se puede interpretar como un
24 problema de ubicar torres.
26 \begin{figure}[H]
27 \centering
28 \includegraphics[scale=0.30]{./figuras/tablero1.png}
29 \caption{Interpretaci\'on del problema de los alfiles como uno de torres}
30 \end{figure}
32 Consideramos ahora el problema de ubicar torres, sin que se ataquen,
33 en un tablero de varias filas, cada una de las cuales puede tener un
34 n\'umero diferente de columnas.
35 Es f\'acil ver que a lo sumo puede haber una torre por fila, y que
36 permutar filas no modifica la cantidad de torres que se pueden ubicar.
37 Sea $columnas(i)$ la cantidad de columnas de la fila $i$.
38 Si se ordenan las filas crecientemente por su cantidad de columnas,
39 vale que las columnas de cada fila
40 están incluidas en las de las filas que están abajo. Esto quiere
41 decir que, al ubicar una torre, la columna en la que fue ubicada queda
42 inutilizable para las filas siguientes.
44 A partir de esto podemos definir la siguiente recurrencia:
46 Sea $cantidad(i,j)=$ cantidad de formas de poner $j$ torres usando las
47 primeras $i$ filas (ordenadas crecientemente por cantidad de columnas). Vale entonces
48 que:
50 $cantidad(i,0) = 1 $, porque hay solo una forma de no poner ninguna torre.
52 $cantidad(0,j) = 0 \ si \ j > 0$, porque no hay forma de poner alguna torre si no quedan casillas.
54 $cantidad(i,j) = cantidad(i-1,j) + cantidad(i-1,j-1) \cdot (columnas(i)-(j-1))\ si \ i > 0$,
55 porque o bien se ponen las $j$ torres en la filas anteriores, o bien se pone una en
56 la fila actual y el resto en las anteriores. Al hacer eso, se est\'an ocupando $j-1$
57 columnas; las restantes quedan libres, por lo cual para cada posible forma de ubicar
58 las torres en las anteriores filas hay $columnas(i) - (j-1)$ columnas libres que
59 pueden usarse.
61 Aplicamos la resoluci\'on del problema de ubicar torres sobre las diagonales
62 negras y las diagonales blancas, para as\'i calcular $a^N_k$ y $a^B_k$.
63 Pueden hacerse las siguientes optimizaciones:
64 \begin{itemize}
65 \item No es necesario ``ordenar'' las diagonales, basta con notar que para las
66 casillas negras las longitudes de las diagonales son 1, 1, 3, 3, ..., etc. (para
67 las casillas blancas es similar pero empezando desde 2).
69 \item Si $n$ es par, las casillas blancas y las negras son sim\'etricas,
70 por lo cual la cantidad de formas de ubicar las piezas es la misma para
71 unas y otras (es decir, $a^B_k = a^N_k$). En ese caso, basta con resolver
72 el problema para las casillas de uno de los colores.
74 \item Si $n > 1$, la cantidad m\'axima de alfiles que se pueden poner en un tablero de $n \times n$ es $2n - 2$.
75 Esto es porque hay $2n - 1$ diagonales pero adem\'as no pueden ubicarse dos alfiles en esquinas opuestas\footnote{
76 Adem\'as est\'a demostrado:
78 Dudeney, H. E. ``Bishops--Unguarded'' and ``Bishops--Guarded.'' \S 297 and 298 in Amusements in Mathematics. New York: Dover, pp. 88-89 and 96, 1970.
80 Madachy, J. Madachy's Mathematical Recreations. New York: Dover, pp. 36-46, 1979. }
81 con lo cual si el $k$ ingresado es mayor, se puede devolver 0 sin procesar nada.
83 \item En todas las diagonales de un color, se pueden poner a lo sumo $n - 1$ alfiles, esto es fácil de ver, si consideramos un tablero ubicado como el de la figura, las casillas negras tienen $n$ diagonales ascendentes, pero dos son de una sola casilla y están en la misma diagonal descendente. Si $n$ es par las casillas blancas son simétricas a las negras, por lo que la cantidad de alfiles que se pueden ubicar es la misma. Si en cambio $n$ es impar, hay $n-1$ diagonales blancas ascendentes, que a lo sumo pueden tener un alfil cada una.
84 Es por esta razón que no hace falta hacer la sumatoria desde $0$ hasta $k$, sino que se puede hacer
85 desde $max(0, k - (n - 1))$ hasta $min(k, n - 1)$. Esto s\'olo vale si $n > 1$, ya que con $n = 1$
86 no hay casillas blancas.
87 \end{itemize}
89 En base a la recurrencia planteada, se ve que basta con llenar una matriz $M$ de $(n + 1) \times (k + 1)$
90 para las negras y otra para las blancas, de modo que $M[i][j]=cantidad(i,j)$. El siguiente es el
91 algoritmo de llenado de la tabla para las casillas negras. Si el tablero es impar, el algoritmo
92 para las casillas blancas es similar. Dado que en cada paso s\'olo se necesita la fila anterior,
93 en la implementaci\'on la matriz se representa guardando s\'olo las \'ultimas dos filas,
94 cada una de $k + 1$ elementos.
96 \begin{algorithm}[H]
97 \begin{algorithmic}
98 \caption{\texttt{ubicar\_en\_negras}: maneras de ubicar $\leq k$ alfiles en las casillas negras de un tablero de $n \times n$}
99 \PARAMS{$n$: alto del tablero, $k$: m\'axima cantidad de alfiles que se quieren poner}
100 \STATE $M$ := matriz de $(n + 1)$ filas y $(k+1)$ columnas %%tal que $M_{ij}=0$
101 %\STATE\COMMENT{$M_{i,j}$ = cantidad de maneras de poner $j$ alfiles en las diagonales negras $[0,i)$}
102 \STATE $M_{i,0} := 1$ para todo $i$
103 \STATE $M_{0,j} := 0$ para todo $j > 0$
104 \FOR{cada $i$ en $[1,n]$}
105 \STATE $casillas$ := n\'umero de casillas de la $(i - 1)$-\'esima diagonal negra
106 \FOR{cada $j$ en $[1,k]$}
107 \STATE $M_{i,j} := M_{i-1,j} + M_{i-1,j-1}*(casillas - (j-1))$
108 \ENDFOR
109 \ENDFOR
110 \STATE $resultado := M[n]$ \COMMENT{\'ultima fila de la matriz}
111 \RETURN $resultado$ \COMMENT{$resultado[j] = $ cantidad de maneras de poner $j$ alfiles en las casillas negras del tablero}
112 \end{algorithmic}
113 \end{algorithm}
115 \begin{algorithm}[H]
116 \begin{algorithmic}
117 \caption{Maneras de ubicar $k$ alfiles en un tablero de $n \times n$}
118 \PARAMS{$n$: alto del tablero, $k$: cantidad de alfiles que se quieren poner}
119 \STATE Si $k=0$ devolver 1.
120 \STATE Si el tablero es s\'olo una casilla y $k=1$, devolver 1.
121 \STATE Si $k >$ m\'aximo numero de alfiles en un tablero de $n \times n$ devolver 0.
122 \STATE $negras :=$ \texttt{ubicar\_en\_negras($n$, $k$)}
123 \STATE $blancas :=$ si $n$ es par, es igual a $negras$; si no, \texttt{ubicar\_en\_blancas($n$, $k$)}
124 \STATE $maneras := 0$
125 \STATE $inf := max(k - (n - 1), 0)$
126 \STATE $sup := min(k, n - 1) + 1$
127 \FOR{cada $a$ en [$inf$, $sup$]}
128 \STATE $maneras := maneras + negras_a * blancas_{k - a}$
129 \ENDFOR
130 \RETURN $maneras$
131 \end{algorithmic}
132 \end{algorithm}
134 Con respecto a la complejidad, vimos que si $k > 2n-2$ no es necesario calcular
135 la matriz. Esto se puede ver en $O(1)$. %Si $k <= 2n-2$ entonces tenemos que contar.
136 Por lo tanto, para calcular la complejidad del resto del algoritmo, se
137 puede asumir que $k \in O(n)$.
139 Computar cada matriz toma $O(n \cdot k)$, que es $O(n^2)$. A lo sumo se computan
140 dos matrices. El costo de recorrer las \'ultimas filas y hacer el producto es
141 $O(k)$, que nuevamente es $O(n)$. Por lo tanto, la complejidad temporal en peor caso
142 es $O(n^2)$.
144 En cuanto a la memoria, alcanza con guardar las \'ultimas dos filas de la matriz
145 en cada paso, por lo cual es la complejidad es $O(k)$ que es $O(n)$.
147 \subsection{Implementación}
149 \noindent
150 \ttfamily
151 \shorthandoff{"}\\
152 \hlstd{}\hlline{\ 1\ }\hldir{\#include\ $<$iostream$>$}\\
153 \hlline{\ 2\ }\hlstd{}\hldir{\#include\ $<$vector$>$}\\
154 \hlline{\ 3\ }\hlstd{}\\
155 \hlline{\ 4\ }\hlkwa{using\ namespace\ }\hlstd{std}\hlsym{;}\\
156 \hlline{\ 5\ }\hlstd{}\\
157 \hlline{\ 6\ }\hlkwc{typedef\ }\hlstd{}\hlkwb{unsigned\ int\ }\hlstd{uint}\hlsym{;}\\
158 \hlline{\ 7\ }\hlstd{}\hlkwc{typedef\ }\hlstd{}\hlkwb{unsigned\ long\ long\ int\ }\hlstd{uint64}\hlsym{;}\\
159 \hlline{\ 8\ }\hlstd{}\\
160 \hlline{\ 9\ }\hldir{\#define\ forsn(i,\ s,\ n)}\hlstd{\ \ }\hldir{for\ (uint\ i\ =\ (s);\ i\ $<$\ (n);\ i++)}\\
161 \hlline{10\ }\hlstd{}\hldir{\#define\ forn(i,\ n)}\hlstd{\ \ }\hldir{forsn\ (i,\ 0,\ n)}\\
162 \hlline{11\ }\hlstd{}\\
163 \hlline{12\ }\hldir{\#define\ num\textunderscore diagonals(n)\ (2\ {*}\ (n)\ {-}\ 1)}\\
164 \hlline{13\ }\hlstd{}\\
165 \hlline{14\ }\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{uint64}\hlsym{$>$\ }\hlstd{vuint64}\hlsym{;}\\
166 \hlline{15\ }\hlstd{}\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{vuint64}\hlsym{$>$\ }\hlstd{vvuint64}\hlsym{;}\\
167 \hlline{16\ }\hlstd{}\\
168 \hlline{17\ }\hldir{\#define\ BLACK\ 0}\\
169 \hlline{18\ }\hlstd{}\hldir{\#define\ WHITE\ 1}\\
170 \hlline{19\ }\hlstd{}\hlslc{//\ m:\ output\ matrix,\ should\ have\ 2\ rows\ and\ k\ +\ 1\ columns}\\
171 \hlline{20\ }\hlstd{}\hlslc{//\ black\textunderscore white\ ==\ 1\ iff\ we\ are\ dealing\ with\ the\ white\ cells\ and\ an\ odd\ value\ of\ n\ }\\
172 \hlline{21\ }\hlstd{vuint64\ }\hlsym{{*}}\hlstd{}\hlkwd{put\textunderscore bishops\textunderscore monochrome}\hlstd{}\hlsym{(}\hlstd{uint\ n}\hlsym{,\ }\hlstd{uint\ k}\hlsym{,\ }\hlstd{}\hlkwb{bool\ }\hlstd{black\textunderscore white}\hlsym{,\ }\hlstd{vvuint64}\hlsym{\&\ }\hlstd{m}\hlsym{)\ \{}\\
173 \hlline{22\ }\hlstd{\ }\hlkwb{bool\ }\hlstd{row\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
174 \hlline{23\ }\hlstd{\\
175 \hlline{24\ }\ m}\hlsym{{[}}\hlstd{}\hlnum{0}\hlstd{}\hlsym{{]}{[}}\hlstd{}\hlnum{0}\hlstd{}\hlsym{{]}\ =\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;\ }\hlstd{}\hlslc{//\ we\ can\ always\ put\ 0\ bishops}\\
176 \hlline{25\ }\hlstd{\ m}\hlsym{{[}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]}{[}}\hlstd{}\hlnum{0}\hlstd{}\hlsym{{]}\ =\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
177 \hlline{26\ }\hlstd{\ \\
178 \hlline{27\ }\ }\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{n\ }\hlsym{{-}\ }\hlstd{black\textunderscore white}\hlsym{)\ \{}\\
179 \hlline{28\ }\hlstd{}\hlstd{\ \ }\hlstd{uint\ num\textunderscore cells\ }\hlsym{=\ }\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{{*}\ (}\hlstd{i\ }\hlsym{/\ }\hlstd{}\hlnum{2}\hlstd{}\hlsym{)\ +\ }\hlstd{}\hlnum{1\ }\hlstd{}\hlsym{+\ }\hlstd{black\textunderscore white}\hlsym{;}\\
180 \hlline{29\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwd{forsn\ }\hlstd{}\hlsym{(}\hlstd{j}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{k\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
181 \hlline{30\ }\hlstd{}\hlstd{\ \ \ }\hlstd{m}\hlsym{{[}}\hlstd{row}\hlsym{{]}{[}}\hlstd{j}\hlsym{{]}\ =\ }\hlstd{m}\hlsym{{[}!}\hlstd{row}\hlsym{{]}{[}}\hlstd{j}\hlsym{{]}\ +\ }\hlstd{m}\hlsym{{[}!}\hlstd{row}\hlsym{{]}{[}}\hlstd{j\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]}\ {*}\ (}\hlstd{num\textunderscore cells\ }\hlsym{{-}\ (}\hlstd{j\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{));}\\
182 \hlline{31\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlsym{\}}\\
183 \hlline{32\ }\hlstd{}\hlstd{\ \ }\hlstd{row\ }\hlsym{=\ !}\hlstd{row}\hlsym{;}\\
184 \hlline{33\ }\hlstd{\ }\hlsym{\}}\\
185 \hlline{34\ }\hlstd{\ }\hlkwa{return\ }\hlstd{}\hlsym{\&}\hlstd{m}\hlsym{{[}!}\hlstd{row}\hlsym{{]};}\\
186 \hlline{35\ }\hlstd{}\hlsym{\}}\\
187 \hlline{36\ }\hlstd{\\
188 \hlline{37\ }uint64\ }\hlkwd{put\textunderscore bishops}\hlstd{}\hlsym{(}\hlstd{uint\ n}\hlsym{,\ }\hlstd{uint\ k}\hlsym{)\ \{}\\
189 \hlline{38\ }\hlstd{\ }\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{==\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{return\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
190 \hlline{39\ }\hlstd{\ }\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{==\ }\hlstd{}\hlnum{1\ }\hlstd{}\hlsym{\&\&\ }\hlstd{n\ }\hlsym{==\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{return\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
191 \hlline{40\ }\hlstd{\ }\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{$>$\ }\hlstd{}\hlkwd{num\textunderscore diagonals}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{)\ {-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
192 \hlline{41\ }\hlstd{\\
193 \hlline{42\ }\ vvuint64\ }\hlkwd{matrix\textunderscore black}\hlstd{}\hlsym{(}\hlstd{}\hlnum{2}\hlstd{}\hlsym{,\ }\hlstd{}\hlkwd{vuint64}\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{));}\\
194 \hlline{43\ }\hlstd{\ vvuint64\ }\hlkwd{matrix\textunderscore white}\hlstd{}\hlsym{(}\hlstd{}\hlnum{2}\hlstd{}\hlsym{,\ }\hlstd{}\hlkwd{vuint64}\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{));}\\
195 \hlline{44\ }\hlstd{\\
196 \hlline{45\ }\ vuint64}\hlsym{\&\ }\hlstd{}\hlkwd{black}\hlstd{}\hlsym{({*}}\hlstd{}\hlkwd{put\textunderscore bishops\textunderscore monochrome}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{k}\hlsym{,\ }\hlstd{BLACK}\hlsym{,\ }\hlstd{matrix\textunderscore black}\hlsym{));}\\
197 \hlline{46\ }\hlstd{\ vuint64}\hlsym{\&\ }\hlstd{}\hlkwd{white}\hlstd{}\hlsym{(}\hlstd{n\ }\hlsym{\%\ }\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{==\ }\hlstd{}\hlnum{0\ }\hlstd{?\ black\ }\hlsym{:\ {*}}\hlstd{}\hlkwd{put\textunderscore bishops\textunderscore monochrome}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{k}\hlsym{,\ }\hlstd{WHITE}\hlsym{,\ }\hlstd{matrix\textunderscore white}\hlsym{));}\\
198 \hlline{47\ }\hlstd{\\
199 \hlline{48\ }\ uint64\ ways\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
200 \hlline{49\ }\hlstd{\ uint\ lower\ }\hlsym{=\ }\hlstd{k\ }\hlsym{$>$\ (}\hlstd{n\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ }\hlstd{?\ k\ }\hlsym{{-}\ (}\hlstd{n\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ :\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
201 \hlline{50\ }\hlstd{\ uint\ upper\ }\hlsym{=\ }\hlstd{}\hlkwd{min}\hlstd{}\hlsym{(}\hlstd{k}\hlsym{,\ }\hlstd{n\ }\hlsym{{-}\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ +\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
202 \hlline{51\ }\hlstd{\ }\hlkwd{forsn\ }\hlstd{}\hlsym{(}\hlstd{a}\hlsym{,\ }\hlstd{lower}\hlsym{,\ }\hlstd{upper}\hlsym{)\ \{}\\
203 \hlline{52\ }\hlstd{}\hlstd{\ \ }\hlstd{ways\ }\hlsym{+=\ }\hlstd{black}\hlsym{{[}}\hlstd{a}\hlsym{{]}\ {*}\ }\hlstd{white}\hlsym{{[}}\hlstd{k\ }\hlsym{{-}\ }\hlstd{a}\hlsym{{]};}\\
204 \hlline{53\ }\hlstd{\ }\hlsym{\}}\\
205 \hlline{54\ }\hlstd{\ }\hlkwa{return\ }\hlstd{ways}\hlsym{;}\\
206 \hlline{55\ }\hlstd{}\hlsym{\}}\\
207 \hlline{56\ }\hlstd{}\\
208 \hlline{57\ }\hlkwb{int\ }\hlstd{}\hlkwd{main}\hlstd{}\hlsym{()\ \{}\\
209 \hlline{58\ }\hlstd{\ uint\ n}\hlsym{,\ }\hlstd{k}\hlsym{;}\\
210 \hlline{59\ }\hlstd{\ }\hlkwa{while\ }\hlstd{}\hlsym{(}\hlstd{}\hlkwa{true}\hlstd{}\hlsym{)\ \{}\\
211 \hlline{60\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwd{scanf}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"\%u\ \%u"}\hlstd{}\hlsym{,\ \&}\hlstd{n}\hlsym{,\ \&}\hlstd{k}\hlsym{);}\\
212 \hlline{61\ }\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{n\ }\hlsym{==\ }\hlstd{}\hlnum{0\ }\hlstd{}\hlsym{\&\&\ }\hlstd{k\ }\hlsym{==\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ }\hlstd{}\hlkwa{break}\hlstd{}\hlsym{;}\\
213 \hlline{62\ }\hlstd{}\hlstd{\ \ }\hlstd{cout\ }\hlsym{$<$$<$\ }\hlstd{}\hlkwd{put\textunderscore bishops}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{k}\hlsym{)\ $<$$<$\ }\hlstd{endl}\hlsym{;}\\
214 \hlline{63\ }\hlstd{\ }\hlsym{\}}\\
215 \hlline{64\ }\hlstd{\ }\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
216 \hlline{65\ }\hlstd{}\hlsym{\}}\\
217 \hlline{66\ }\hlstd{}\\
218 \mbox{}
219 \normalfont
220 \shorthandon{"}